#include <stdio.h>
#include <stdlib.h>

//写一个函数，找出一组数组中唯二不重复的元素
int* find_dif(int* nums, int numsSize)
{
        //如果数组只有两个元素，直接返回
        if(numsSize == 2)
        {
            return nums;
        }
        int ret = 0;
        int i = 0;
        int* p = (int*)malloc(sizeof(int)*2);
        p[0] = p[1] = 0;
        //全员异或一次，可以得到两个不同数字的异或结果
        for(i = 0; i < numsSize; i++)
        {
            ret ^= nums[i];
        }
        //根据位判断ret哪一位是1，表示两个数字的该位不同
        //记录当前位数
        int pos = 0;
        for(pos = 0; pos < 32; pos++)
        {
            if(((ret>>pos) & 1) == 1)
            {
                break;
            }
        }
        //根据pos记录的位数，将数组分组为当前位为1或0的两组
        for(i = 0; i < numsSize; i++)
        {
            if(((nums[i] >> pos) & 1) ==0)
            {
                p[0] ^= nums[i];
            }
            else
            {
                p[1] ^= nums[i];
            }
        }
        return p;
}

int main()
{
    int arr[] = {1,1,2,2,3,4,4,5};
    int i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    int *p = find_dif(arr, sz);
    for ( i = 0; i < 2; i++)
    {
        printf("%d ", *(p+i));
    }
    free(p);
    p = NULL;
    
    return 0;
}